/*------------------------------------------------------
                hou_elearningGEN beta v1.0
Author: xtrung.net@gmail.com
Write On: 04/27/2008
Create On:4/13/2012 11:22:39 AM
------------------------------------------------------*/
using hou_elearning.Entity;
using hou_elearning.DataAccess;
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
namespace hou_elearning.Business
{
    public class NguoidungBRL
    {
        #region Init
        private static string EX_NOT_EXIST="Không Tồn Tại Nguoidung Này";
		private static string EX_STENDANGNHAP_EMPTY="sTendangnhap không được để trống";
		private static string EX_SMATKHAU_EMPTY="sMatkhau không được để trống";
		private static string EX_SHOTEN_EMPTY="sHoten không được để trống";
		private static string EX_SEMAIL_EMPTY="sEmail không được để trống";
		private static string EX_DNGAYSINH_INVALID="dNgaysinh không hợp lệ";
		private static string EX_BANHTHE_INVALID="bAnhthe không hợp lệ";
		private static string EX_ID_INVALID="PK_iNguoidungID không hợp lệ";
        #endregion
        #region Public Methods
        /// <summary>
        /// Get Nguoidung Theo ID
        /// </summary>
        /// <param name="PK_iNguoidungID">Int64:Nguoidung ID</param>
        /// <returns>NguoidungEntity</returns>        
        public static NguoidungEntity GetOne(Int64 PK_iNguoidungID)
        {
            
			if(PK_iNguoidungID<=0)
				throw new Exception(EX_ID_INVALID);
            return NguoidungDAL.GetOne(PK_iNguoidungID);
        }
        /// <summary>
        /// Lấy về List các Nguoidung
        /// </summary>
        /// <returns>List NguoidungEntity:List Nguoidung Cần lấy</returns>
        public static List<NguoidungEntity> GetAll()
        {
            return NguoidungDAL.GetAll();
        }
        /// <summary>
        /// Lấy về top giảng viên được vote nhiều nhất
        /// </summary>
        /// <returns>List NguoidungEntity:List Nguoidung Cần lấy</returns>
        /// <author>liemqv</author>
        /// <create>24/04/2012</create>
        public static List<NguoidungEntity> GetTopByVote()
        {
            return NguoidungDAL.GetTopByVote();
        }
        
        /// <summary>
        /// Kiểm tra và thêm mới Nguoidung
        /// </summary>
        /// <param name="entity">Entity</param>
        /// <returns>Int32: ID của Nguoidung Mới Thêm Vào</returns>
        public static Int32 Add(NguoidungEntity entity)
        {
            checkLogic(entity);
            checkDuplicate(entity, false);
            checkFK(entity);
            return NguoidungDAL.Add(entity);
        }
        /// <summary>
        /// Kiểm tra và chỉnh sửa Nguoidung
        /// </summary>
        /// <param name="entity">NguoidungEntity</param>
        /// <returns>bool:kết quả thực hiện</returns>
        public static bool Edit(NguoidungEntity entity)
        {
            checkExist(entity.PK_iNguoidungID);
            checkLogic(entity);
            checkDuplicate(entity, true);
            checkFK(entity);
            return NguoidungDAL.Edit(entity);
        }
        /// <summary>
        /// Kiểm tra và xoá Nguoidung
        /// </summary>
        /// <param name="PK_iNguoidungID">Int64 : PK_iNguoidungID</param>
        /// <returns>bool:kết quả thực hiện</returns>
        public static bool Remove(Int64 PK_iNguoidungID)
        {
            checkExist(PK_iNguoidungID);
            return NguoidungDAL.Remove(PK_iNguoidungID);
        }
        #endregion
        #region Private Methods
        private static void checkExist(Int64 PK_iNguoidungID)
        {
            NguoidungEntity oNguoidung=NguoidungDAL.GetOne(PK_iNguoidungID);
            if(oNguoidung==null)
                throw new Exception(EX_NOT_EXIST);
        }
        /// <summary>
        /// Kiểm tra logic Entity
        /// </summary>
        /// <param name="entity">NguoidungEntity: entity</param>
        private static void checkLogic(NguoidungEntity entity)
        {   
			if (String.IsNullOrEmpty(entity.sTendangnhap))
				throw new Exception(EX_STENDANGNHAP_EMPTY);
			if (String.IsNullOrEmpty(entity.sMatkhau))
				throw new Exception(EX_SMATKHAU_EMPTY);
			if (String.IsNullOrEmpty(entity.sHoten))
				throw new Exception(EX_SHOTEN_EMPTY);
			if (String.IsNullOrEmpty(entity.sEmail))
				throw new Exception(EX_SEMAIL_EMPTY);
			if (DateTime.Parse("1753-01-01")>entity.dNgaysinh)
				throw new Exception(EX_DNGAYSINH_INVALID);
            //if (entity.bAnhthe < 0)
            //    throw new Exception(EX_BANHTHE_INVALID);
        }
        /// <summary>
        /// Kiểm tra trùng lặp bản ghi
        /// </summary>
        /// <param name="entity">NguoidungEntity: NguoidungEntity</param>
        private static void checkDuplicate(NguoidungEntity entity,bool checkPK)
        {
            /* 
            Example
            List<NguoidungEntity> list = NguoidungDAL.GetAll();
            if (list.Exists(
                delegate(NguoidungEntity oldEntity)
                {
                    bool result =oldEntity.FIELD.Equals(entity.FIELD, StringComparison.OrdinalIgnoreCase);
                    if(checkPK)
                        result=result && oldEntity.PK_iNguoidungID != entity.PK_iNguoidungID;
                    return result;
                }
            ))
            {
                list.Clear();
                throw new Exception(EX_FIELD_EXISTED);
            }
            */
        }
        /// <summary>
        /// Kiểm tra tồn tại khóa ngoại
        /// </summary>
        /// <param name="entity">NguoidungEntity:entity</param>
        private static void checkFK(NguoidungEntity entity)
        {            
        }
        #endregion
    }
}
